Linux 系统监控命令 vmstat iostat
####################################################################
●vmstat
vmstat 命令报告关于内核线程、虚拟内存、磁盘、陷阱和 CPU 活动的统计信息。
由 vmstat 命令生成的报告可以用于平衡系统负载活动。
系统范围内的这些统计信息（所有的处理器中）都计算出以百分比表示的平均值，或者计算其总和。

●用法
  vmstat [-a] [-n] [-S unit] [delay [ count]]
  vmstat [-s] [-n] [-S unit]
  vmstat [-m] [-n] [delay [ count]]
  vmstat [-d] [-n] [delay [ count]]
  vmstat [-p disk partition] [-n] [delay [ count]]
  vmstat [-f]
  vmstat [-V]

  -a：显示活跃和非活跃内存
  -f：显示从系统启动至今的fork数量 。
  -m：显示slabinfo
  -n：只在开始时显示一次各字段名称。
  -s：显示内存相关统计信息及多种系统活动数量。
  delay：刷新时间间隔。如果不指定，只显示一条结果。
  count：刷新次数。如果不指定刷新次数，但指定了刷新时间间隔，这时刷新次数为无穷。
  -d：显示磁盘相关统计信息。
  -p：显示指定磁盘分区统计信息
  -S：使用指定单位显示。参数有 k 、K 、m 、M ，分别代表1000、1024、1000000、1048576字节（byte）。默认单位为K（1024 bytes）
  -V：显示vmstat版本信息。

●字段含义
#Procs（进程）
  r---等待执行的任务数
      展示了正在执行和等待cpu资源的任务个数。当这个值超过了cpu个数，就会出现cpu瓶颈。
  b---等待IO的进程数量
#Memory(内存)
  swpd---正在使用虚拟的内存大小，单位k
  free---空闲内存大小
  buff---已用的buff大小，对块设备的读写进行缓冲
  cache--已用的cache大小，文件系统的cache
  inact--非活跃内存大小，即被标明可回收的内存，区别于free和active
         具体含义见：概念补充（当使用-a选项时显示）
  active-活跃的内存大小
         具体含义见：概念补充（当使用-a选项时显示）
#Swap
  si-----每秒从交换区写入内存的大小（单位：kb/s）
  so-----每秒从内存写到交换区的大小
#IO
  bi-----每秒读取的块数（读磁盘）现在的Linux版本块的大小为1024bytes
  bo-----每秒写入的块数（写磁盘）
#system
  in-----每秒中断数，包括时钟中断这两个值越大，会看到由内核消耗的cpu时间会越多
  cs-----每秒上下文切换数
#对Linux内核中进程上下文和中断上下文的理解
https://www.cnblogs.com/reality-soul/p/6377137.html

#CPU（以百分比表示）
  Us-----用户进程执行消耗cpu时间(user time)
    us的值比较高时，说明用户进程消耗的cpu时间多，但是如果长期超过50%的使用，那么我们就该考虑优化程序算法或其他措施了
  Sy-----系统进程消耗cpu时间(system time)
    sys的值过高时，说明系统内核消耗的cpu资源多，这个不是良性的表现，我们应该检查原因
  Id-----空闲时间(包括IO等待时间)
  wa-----等待IO时间
    Wa过高时，说明io等待比较严重，这可能是由于磁盘大量随机访问造成的，也有可能是磁盘的带宽出现瓶颈。
    
●常见问题处理

如果r经常大于4，且id经常少于40，表示cpu的负荷很重。

如果pi，po长期不等于0，表示内存不足。

如果disk经常不等于0，且在b中的队列大于3，表示io性能不好。

1.)如果在processes中运行的序列(process r)是连续的大于在系统中的CPU的个数表示系统现在运行比较慢,有多数的进程等待CPU。

2.)如果r的输出数大于系统中可用CPU个数的4倍的话,则系统面临着CPU短缺的问题,
   者是CPU的速率过低,系统中有多数的进程在等待CPU,造成系统中进程运行过慢。

3.)如果空闲时间(cpu id)持续为0并且系统时间(cpu sy)是用户时间的两倍(cpu us)系统则面临着CPU资源的短缺。

●解决办法:
当发生以上问题的时候请先调整应用程序对CPU的占用情况.使得应用程序能够更有效的使用CPU.
同时可以考虑增加更多的CPU.  关于CPU的使用情况还可以结合mpstat,  ps aux top  prstat –a等等一些相应的命令来综合考虑关于具体的CPU的使用情况,和那些进程在占用大量的CPU时间.一般情况下，应用程序的问题会比较大一些.比如一些sql语句不合理等等都会造成这样的现象.

●内存问题现象:

内存的瓶颈是由scan rate (sr)来决定的.scan rate是通过每秒的始终算法来进行页扫描的.
如果scan rate(sr)连续的大于每秒200页则表示可能存在内存缺陷.
同样的如果page项中的pi和po这两栏表示每秒页面的调入的页数和每秒调出的页数.
如果该值经常为非零值,也有可能存在内存的瓶颈,当然,如果个别的时候不为0的话,属于正常的页面调度这个是虚拟内存的主要原理.

●解决办法: 
1.调节applications & servers使得对内存和cache的使用更加有效.

2.增加系统的内存.

3. Implement priority paging in s in pre solaris 8 
ersions by adding line "set priority paging=1" in /etc/system.
Remove this line if upgrading from Solaris 7 to 8 & retaining old /etc/system file.

关于内存的使用情况还可以结ps aux top  prstat –a等等一些相应的
命令来综合考虑关于具体的内存的使用情况,和那些进程在占用大量的内存.一般情况下，
如果内存的占用率比较高,但是,CPU的占用很低的时候,可以考虑是有很多的应用程序占用了内存没有释放,
但是,并没有占用CPU时间,可以考虑应用程序,对于未占用CPU时间和一些后台的程序,释放内存的占用。

####################################################################
●iostat
  用于报告中央处理器统计信息
  iostat用于报告
  中央处理器（CPU）统计信息和整个系统、
  适配器、tty 设备、磁盘和 CD-ROM 的输入/输出统计信息，
  默认显示了与vmstat相同的cpu使用信息，使用以下命令显示扩展的设备统计：

第一行显示的是自系统启动以来的平均值，然后显示增量的平均值，每个设备一行。
常见linux的磁盘IO指标的缩写习惯：
rq是request,
r是read,
w是write,
qu是queue，
sz是size,
a是verage,
tm是time,
svc是service。

▪rrqm/s和wrqm/s：每秒合并的读和写请求，“合并的”意味着操作系统从队列中拿出多个逻辑请求合并为一个请求到实际磁盘。 
▪r/s和w/s：每秒发送到设备的读和写请求数。
▪rsec/s和wsec/s：每秒读和写的扇区数。 
▪avgrq –sz：请求的扇区数。
▪avgqu –sz：在设备队列中等待的请求数。
▪await：每个IO请求花费的时间。 
▪svctm：实际请求（服务）时间。
▪%util：至少有一个活跃请求所占时间的百分比。

[root@ekp227 ~]# iostat -d -x 3 #交互
Linux 3.10.0-693.el7.x86_64 (ekp227) 	2019年03月17日 	_x86_64_	(8 CPU)

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     0.45    0.25    8.08    17.58   223.04    57.75     0.01    1.64    1.06    1.66   0.22   0.19
scd0              0.00     0.00    0.00    0.00     0.00     0.00   114.22     0.00    0.61    0.61    0.00   0.44   0.00
dm-0              0.00     0.00    0.12    1.13     3.20    58.88    99.37     0.03   21.13    0.37   23.39   0.12   0.01

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
scd0              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
dm-0              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
####################################################################
dstat

系统监控工具
dstat显示了cpu使用情况，磁盘io情况，网络发包情况和换页情况，输出是彩色的，
可读性较强，相对于vmstat和iostat的输入更加详细且较为直观。
在使用时，直接输入命令即可，当然也可以使用特定参数。

如下：dstat -cdlmnpsy
[root@ekp227 ~]# dstat  #彩色的
You did not select any stats, using -cdngy by default.
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read  writ| recv  send|  in   out | int   csw 
  5   2  93   0   0   0|  18k  223k|   0     0 |   0     0 |  28k   24k
  5   2  93   0   0   0|   0    12k|1903k 1432k|   0     0 |  34k   31k
  5   2  93   0   0   0|   0   109k|1936k 1444k|   0     0 |  34k   31k
  4   1  94   0   0   0|   0    10k|1861k 1396k|   0     0 |  33k   30k
  5   2  94   0   0   0|   0     0 |1847k 1386k|   0     0 |  33k   30k
  4   2  94   0   0   0|   0     0 |1849k 1393k|   0     0 |  33k   30k
  4   2  94   0   0   0|   0     0 |1738k 1314k|   0     0 |  32k   29k
  5   2  94   0   0   0|   0     0 |1559k 1196k|   0     0 |  30k   27k
  4   2  94   0   0   0|   0     0 |1781k 1336k|   0     0 |  32k   29k
  4   2  94   0   0   0|   0     0 |1640k 1238k|   0     0 |  30k   28k
  5   2  94   0   0   0|   0     0 |1702k 1280k|   0     0 |  31k   28k
  5   2  94   0   0   0|   0     0 |1632k 1235k|   0     0 |  30k   27k
  5   1  94   0   0   0|   0     0 |1564k 1189k|   0     0 |  29k   27k
  5   2  93   0   0   0|   0   910k|1671k 1257k|   0     0 |  31k   28k
  4   2  94   0   0   0|   0     0 |1615k 1222k|   0     0 |  31k   28k
  4   2  94   0   0   0|   0  1536B|1645k 1244k|   0     0 |  31k   28k
  4   2  94   0   0   0|   0  5120B|1690k 1272k|   0     0 |  31k   28k
  4   2  94   0   0   0|   0   141k|1597k 1215k|   0     0 |  30k   27k
  4   1  94   0   0   0|   0    11k|1637k 1231k|   0     0 |  31k   27k
  4   1  94   0   0   0|   0     0 |1695k 1280k|   0     0 |  31k   28k
  4   2  94   0   0   0|   0     0 |1520k 1158k|   0     0 |  29k   27k
  5   2  93   0   0   0|   0     0 |1655k 1248k|   0     0 |  30k   27k
  4   1  94   0   0   0|   0     0 |1645k 1245k|   0     0 |  29k   27k
  5   2  93   0   0   0|   0     0 |1721k 1294k|   0     0 |  30k   29k
  5   2  94   0   0   0|   0     0 |1703k 1278k|   0     0 |  30k   28k
